This invention relates to the field of computer systems. More particularly, an apparatus and method are provided for reliably transferring a value (e.g., a counter or index value) from one clock domain to another clock domain.
In many computer systems, components such as communication interfaces, processors, memory modules, and so on, must communicate with other components asynchronously (i.e., across clock domain boundaries). A clock domain may comprise any number of components, or any amount of circuitry, operating under one clock reference.
When transmitting information from one clock domain to another, because the sender's and receiver's clocks are not synchronized, the receiver may encounter difficulty reading the information correctly. For example, when the communication path comprises multiple bits (e.g., a 16-bit, 32-bit or 64-bit bus), if the information is transmitted in binary code, several bits may transition during each pulse. If the receiver attempts to read or latch onto the sender's signal while multiple bits are transitioning, the receiver may observe an incorrect value.
Attempts have been made to send information across clock domains in a format other than binary. However, because the information is not received in binary or other mathematically meaningful format, it cannot be readily used in calculations. For example, it may be necessary to transmit a read or write pointer value (e.g., an index) from one clock domain to another. If the information is not passed in binary format, it cannot be readily used for comparison, to determine whether the indexed structure is full or empty.
Therefore, what is needed is an apparatus and method for reliably transferring a value across clock domains so that when it is received, it can be used in a mathematical computation.